home *** CD-ROM | disk | FTP | other *** search
/ Aminet 39 / Aminet 39 (2000)(Schatztruhe)[!][Oct 2000].iso / Aminet / biz / swood / FW_AllInOne.lha / Makros / ObjAusrichten.long < prev    next >
Text File  |  1998-01-17  |  14KB  |  556 lines

  1. /******************************************
  2.  * Objekte ausrichten                     *
  3.  * $VER: 3.0 © Heiko Schröder 09.01.98   *
  4.  ******************************************/
  5. /*alle Objekte werden ausgerichtet;
  6.   auch Umrisse und Tabellen
  7.   unbegrenztes Undo
  8.   Löschen der Undos beim Verlassen
  9. */
  10. Parse ARG FW
  11.  
  12. if ~show('L',"rexxreqtools.library") then
  13.    if ~addlib('rexxreqtools.library',0,-30,0) then do
  14.       'ShowMessage 1 1 "Fehler...." "Benötige Libs:rexxreqtools.library" " A B B R U C H ! !" "Okay" "" ""'
  15.       exit
  16.    end
  17. IF ~show('L','tritonrexx.library') then
  18.    IF ~ADDLIB('tritonrexx.library',10,-30,0) THEN DO
  19.       'ShowMessage 2 1 "Fehler...." "Benötige Libs:tritonrexx.library" "" "Abbruch" "" ""'
  20.       exit
  21.    END
  22.  
  23. R='0A'X
  24. SIGNAL ON syntax
  25.  
  26. If open('Hilfe',"S:FW_Paket.prefs","R") then do
  27.    HilfeVerz=readln('Hilfe')
  28.    Call Close('Hilfe')
  29. End
  30. else HilfeVerz=''
  31.  
  32. If FW='' then do
  33.    Address='FinalW'
  34.    Options results
  35.  
  36.    STATUS PORTNAME
  37.    FW = result
  38. End
  39.    address(FW)
  40.  
  41. hor.0=4
  42. hor.1="Ohne"
  43. hor.2="Oben"
  44. hor.3="Zentriert"
  45. hor.4="Unten"
  46.  
  47. ver.0=4
  48. ver.1="Ohne"
  49. ver.2="Links"
  50. ver.3="Zentriert"
  51. ver.4="Rechts"
  52.  
  53. rel.0=3
  54. rel.1="Zueinander"
  55. rel.2="Zur Seite"
  56. rel.3="Zum Editierbereich"
  57.  
  58. undos=1
  59.  
  60. apptags = 'TRCA_Name     AOO',
  61.           'TRCA_LongName "Objekte ausrichten"',
  62.           'TRCA_Info     "für FinalWriter"',
  63.           'TRCA_Version  "3.0 registered"',
  64.           'TRCA_Release  "3"',
  65.           'TRCA_Date     "09.01.98"',
  66.           'TAG_END'
  67.  
  68. /*
  69. ** Fenster öffnen
  70. */
  71.  
  72. windowtags = WindowID(1),
  73.              WindowPosition('TRWP_CENTERDISPLAY'),
  74.              PubScreenName('FinalWriterPubScreen'),
  75.              WindowTitle("Objekte ausrichten"),
  76.              WindowFlags('TRWF_NOMINTEXTWIDTH|TRWF_NOSIZEGADGET'),
  77.              BeginMenu('Projekt'),
  78.                 MenuItem('Q_Verlassen',104),
  79.              BeginMenu('?'),
  80.                 MenuItem('?_Info',101),
  81.                 MenuItem('H_Hilfe',103),
  82.              'VertGroupAC',
  83.                 'Space',
  84.                 'HorizGroupEC',
  85.                    'SpaceS',
  86.                    NamedFrameBox('_Vertikal') 'TRAT_ID 2',
  87.                    'VertGroupA',
  88.                       'SpaceS',
  89.                       'HorizGroup',
  90.                          'SpaceS',
  91.                          FWListSelC('ver',2,0) 'TRAT_Flags TRLV_ShowSelected TRAT_MINWIDTH 13',
  92.                          'SpaceS',
  93.                       'EndGroup',
  94.                       'SpaceS',
  95.                    'EndGroup',
  96.                    'Space',
  97.                    NamedFrameBox('_Horizontal') 'TRAT_ID 1',
  98.                    'VertGroupA',
  99.                       'SpaceS',
  100.                       'HorizGroup',
  101.                          'SpaceS',
  102.                          FWListSelC('hor',1,0) 'TRAT_Flags TRLV_ShowSelected TRAT_MINWIDTH 13',
  103.                          'SpaceS',
  104.                       'EndGroup',
  105.                       'SpaceS',
  106.                    'EndGroup',
  107.                    'SpaceS',
  108.                 'EndGroup',
  109.                 'Space',
  110.                 'HorizGroupEC',
  111.                    'SpaceS',
  112.                    NamedFrameBox('Zwischenraum'),
  113.                    'VertGroupA',
  114.                       'SpaceS',
  115.                       'HorizGroupC',
  116.                          'SpaceS',
  117.                          TextNR('=='),
  118.                          'SpaceS',
  119.                          StringGadget('',4),
  120.                          TextN(' cm'),
  121.                          'SpaceB',
  122.                          TextNR('| |'),
  123.                          'SpaceS',
  124.                          StringGadget('',5),
  125.                          TextN(' cm'),
  126.                          'SpaceS',
  127.                       'EndGroup',
  128.                       'SpaceS',
  129.                    'EndGroup',
  130.                    'SpaceS',
  131.                 'EndGroup',
  132.                 'SpaceS',
  133.                 'HorizGroupEC',
  134.                    'SpaceS',
  135.                    NamedFrameBox('_Relativ') 'TRAT_ID 3',
  136.                    'HorizGroupEC',
  137.                       'SpaceS',
  138.                       'VertGroupAC',
  139.                          'SpaceS',
  140.                          FWListSelC('rel',3,0) 'TRAT_Flags TRLV_ShowSelected TRAT_MINHeight 3',
  141.                          'SpaceS',
  142.                       'EndGroup',
  143.                       'SpaceS',
  144.                    'EndGroup',
  145.                    'SpaceS',
  146.                 'EndGroup',
  147.                 'Space',
  148.                 'HorizGroupEC',
  149.                    'SpaceS',
  150.                    Button('_Anwenden',7),
  151.                    'SpaceS',
  152.                    Button('_Undo',9) 'TRAT_DISABLED 1',
  153.                    'SpaceS',
  154.                    Button('Ab_bruch',8),
  155.                    'SpaceS',
  156.                 'EndGroup',
  157.                 'Space',
  158.              'EndGroup',
  159.           'EndProject'
  160.  
  161. app = TR_CREATEAPP('TRCA_Name AOO')
  162.  
  163. /*
  164. ** Auf Schließsymbol warten
  165. */
  166.  
  167. IF app ~= '00000000'x THEN DO
  168.    window1 = TR_OPENPROJECT(app,windowtags)
  169.    IF window1 ~= '00000000'x THEN DO
  170.       ende = 0
  171.  
  172.       DO WHILE ~ende
  173.          CALL TR_WAIT(app,'')
  174.  
  175.          DO WHILE TR_HANDLEMSG(app,'event')
  176.             IF event.trm_class = 'TRMS_CLOSEWINDOW' THEN ende = 1
  177.  
  178.             IF event.trm_class = 'TRMS_NEWVALUE' THEN DO
  179.                SELECT
  180.                   WHEN event.trm_id = 3 THEN what = event.trm_data+1  /*relativ*/
  181.  
  182.                   OTHERWISE NOP
  183.                END
  184.             END
  185.  
  186.             IF event.trm_class = 'TRMS_ACTION' THEN DO
  187.                SELECT
  188.                   WHEN event.trm_id = 7 THEN Do
  189.                      horiz= TR_GETATTRIBUTE(window1,2,'TRAT_VALUE')
  190.                      verti= TR_GETATTRIBUTE(window1,1,'TRAT_VALUE')
  191.                      relat= TR_GETATTRIBUTE(window1,3,'TRAT_VALUE')
  192.  
  193.                      offhoriz=TR_GETATTRIBUTE(window1,4,'TROB_STRING')
  194.                      offverti=TR_GETATTRIBUTE(window1,5,'TROB_STRING')
  195.  
  196.                      Call program
  197.                   END
  198.  
  199.                   WHEN event.trm_id = 9 THEN Call programUndo
  200.  
  201.                   WHEN event.trm_id = 8 THEN ende=1
  202.  
  203.                   WHEN event.trm_id = 101 THEN Call rtezrequest("Aus dem Makro-Paket:"||R||R||"Objekte ausrichten V3.0 für FW"||R||"© 1998 Heiko Schröder","Danke für Ihre Registrierung.","Info","rt_pubscrname=FinalWriterPubScreen")
  204.                   WHEN event.trm_id = 103 THEN address command "run Multiview PUBSCREEN=FinalWriterPubScreen "||d2c(34)||HilfeVerz||"ObjAusrichten.guide"||d2c(34)
  205.                   WHEN event.trm_id = 104 THEN ende=1
  206.  
  207.                   OTHERWISE NOP
  208.                END
  209.             END
  210.          END
  211.  
  212.       END
  213.       CALL TR_CLOSEPROJECT(window1)
  214.    END
  215.    CALL TR_DELETEAPP(app)
  216. END
  217. ELSE
  218.    CALL quit('Kann das Fenster nicht öffnen',10)
  219.  
  220. Call Fini
  221. Exit
  222.  
  223.  
  224. program:
  225.    address(FW)
  226.    GetDocItemPrefs Decimal
  227.    Punkt=Result
  228.    If Punkt="Comma" then DocItemPrefs Decimal Period
  229.  
  230.    GraphicTool
  231.    nr=1
  232.  
  233.    /*---Schauen, ob Objekte ausgewählt worden sind---*/
  234.  
  235.    Select
  236.       When relat=0 then do
  237.          CurrentObject
  238.          ID=result
  239.          Objekt.0=nr; Objekt.nr=ID
  240.          If Objekt.1="0" then do
  241.             ret=rtezrequest("Kein Objekt ausgewählt...","_Achso","Fehler!","rt_pubscrname=FinalWriterPubScreen")
  242.             Return
  243.          End
  244.       end
  245.  
  246.       When (relat=1 | relat=2) then do
  247.          ID=-1
  248.          Objekt.0=nr; Objekt.nr=ID     /*ID der Seite*/
  249.  
  250.          CurrentObject
  251.          ID=result
  252.          If ID=0 then do
  253.             ret=rtezrequest("Kein Objekt ausgewählt...","_Achso","Fehler!","rt_pubscrname=FinalWriterPubScreen")
  254.             Return
  255.          End
  256.       end
  257.  
  258.       Otherwise NOP
  259.    end
  260.  
  261.    /*---IDs der Objekte bestimmen---*/
  262.  
  263.    RedrawOff
  264.  
  265.    FirstObject Selected
  266.    ID=result
  267.    Call Zaehlen
  268.  
  269.    Do While 1
  270.       NextObject ID Selected
  271.       ID=result
  272.       If ID=0 then Leave
  273.       Call Zaehlen
  274.    End
  275.  
  276.    address "REXX"
  277.    Call TR_SETATTRIBUTE(window1,9,'TRAT_DISABLED',0)      /* Undo freigeben*/
  278.    address(FW)
  279.  
  280.    /*---Größen aller Grafiken bestimmen---*/
  281.  
  282.    Menge=0
  283.    Do i=1 to Objekt.0
  284.       if ((i=1) & (relat~=0)) then do
  285.  
  286.          GetPageSetup Width Height
  287.          Parse Var result weite.i hoehe.i
  288.          Status Page
  289.          seite.i=result
  290.  
  291.          /*---Ausrichten an der Seite---*/
  292.  
  293.          if relat=1 then do
  294.             left.i=0; top.i=0
  295.          end
  296.  
  297.          /*---Ausrichten an Editierbereich---*/
  298.  
  299.          if relat=2 then do
  300.             GetSectionSetup Top Bottom Inside Outside
  301.             Parse Var result top.i bott left.i outs
  302.             weite.i=weite.i-left.i-outs
  303.             hoehe.i=hoehe.i-top.i-bott
  304.          end
  305.       end
  306.  
  307.       /*--- zueinander ausrichten ---*/
  308.  
  309.       else do
  310.          GetObjectCoords Objekt.i
  311.          Parse Var result seite.i left.i top.i weite.i hoehe.i
  312.          undomenge=i
  313.          undoid.i=Objekt.i
  314.          undoseite.i=seite.i
  315.          undoleft.i=left.i
  316.          undotop.i=top.i
  317.          undoweite.i=weite.i
  318.          undohoehe.i=hoehe.i
  319.  
  320.          Call UndoWrite i
  321.  
  322.          GetObjectType Objekt.i
  323.          typ=result
  324.  
  325.          /*---Linien/Pfeillinien/TextBlöcken/Polygonen anders handeln->gruppieren---*/
  326.          if typ=2|typ=3|typ=7|typ=10 then do
  327.             menge=menge+1
  328.             copy
  329.             Paste
  330.             CurrentObject
  331.             ID=result
  332.             SetObjectCoords ID seite.i left.i top.i weite.i hoehe.i
  333.             SelectObject Objekt.i MULTIPLE
  334.             Group
  335.             weg.0=menge          /*Linie die weg muß*/
  336.             weg.menge=ID
  337.  
  338.             CurrentObject
  339.             ID=result
  340.             gruppe.0=menge       /*Gruppe die aufgelöst werden muß*/
  341.             gruppe.menge=ID
  342.             GetObjectCoords ID
  343.             Parse Var result seite.i left.i top.i weite.i hoehe.i
  344.  
  345.             altStelle.0=menge
  346.             altStelle.menge=i
  347.             altID.0=menge
  348.             altID.menge=Objekt.i
  349.             Objekt.i=ID
  350.          end
  351.       end
  352.    End
  353.  
  354.    If verti="1" then             /* oben */
  355.       Do i= 2 to Objekt.0
  356.          top.i=top.1
  357.          seite.i=seite.1
  358.       End
  359.  
  360.    If verti="2" then do          /* mitte */
  361.       mitte=top.1+(hoehe.1/2)
  362.       Do i= 2 to Objekt.0
  363.          top.i=mitte-(hoehe.i/2)
  364.          seite.i=seite.1
  365.       End
  366.    End
  367.  
  368.    If verti="3" then do          /* unten */
  369.       unten=top.1+hoehe.1
  370.       Do i= 2 to Objekt.0
  371.          top.i=unten-hoehe.i
  372.          seite.i=seite.1
  373.       End
  374.    End
  375.  
  376.    If horiz="1" then             /* links */
  377.       Do i= 2 to Objekt.0
  378.          left.i=left.1
  379.       End
  380.  
  381.    If horiz="2" then do          /* mitte */
  382.       mitte=left.1+(weite.1/2)
  383.       Do i= 2 to Objekt.0
  384.          left.i=mitte-(weite.i/2)
  385.       end
  386.    End
  387.  
  388.    If horiz="3" then do          /* rechts */
  389.       rechts=left.1+weite.1
  390.       Do i= 2 to Objekt.0
  391.          left.i=rechts-weite.i
  392.       End
  393.    End
  394.  
  395.  
  396. /* Objektdaten für Verschiebung - nachbearbeiten*/
  397.  
  398.    If offverti~="" then do         /* ok */
  399.       If relat=1 then weite.1=0-offverti
  400.       If relat=2 then weite.1=0-offverti
  401.       Do i=2 to Objekt.0
  402.          mass=0
  403.          Do y=1 to i-1
  404.             mass=mass+weite.y+offverti
  405.          end
  406.          left.i=left.1+mass
  407.       End
  408.    End
  409.  
  410.    If offhoriz~="" then do
  411.       If relat=1 then hoehe.1=0-offhoriz
  412.       If relat=2 then hoehe.1=0-offhoriz
  413.       Do i=2 to Objekt.0
  414.          mass=0
  415.          Do y=1 to i-1
  416.             mass=mass+hoehe.y+offhoriz
  417.          end
  418.          top.i=top.1+mass
  419.       End
  420.    End
  421.  
  422. /* Ende des Verschiebung */
  423.  
  424.    Do a=2 to Objekt.0
  425.       SetObjectCoords Objekt.a seite.a left.a top.a weite.a hoehe.a
  426.    End
  427.    Redraw
  428.  
  429.    Do a=1 to menge            /*Gruppierungen auflösen und Copies löschen*/
  430.       SelectObject gruppe.a
  431.       ungroup
  432.       DeleteObject weg.a      /*Copy löschen*/
  433.       i=altStelle.a           /*alte Linie wieder den ID zuordnen*/
  434.       Objekt.i=altID.a
  435.    end
  436.  
  437.    Do a=2 to Objekt.0
  438.       SelectObject Objekt.a MULTIPLE
  439.    End
  440.    if relat=0 then SelectObject Objekt.1 MULTIPLE
  441.  
  442.    RedrawOn
  443.    Redraw
  444.  
  445.    undos=undos+1     /* Anzahl der möglichen Undos */
  446.  
  447. Return
  448.  
  449. /* ok */
  450. Zaehlen:
  451.    If ID~=Objekt.1 then do
  452.       nr=nr+1
  453.       Objekt.0=nr; Objekt.nr=ID
  454.    End
  455. Return
  456.  
  457. /* UNDOS */
  458. programUndo:
  459.  
  460.    Call UndoRead
  461.  
  462.    TextTool
  463.    GraphicTool
  464.    Do i=1 to undomenge-1
  465.       SetObjectCoords undoid.i undoseite.i undoleft.i undotop.i undoweite.i undohoehe.i
  466.    end
  467.  
  468.    Do a=2 to undomenge-1
  469.       SelectObject undoid.a MULTIPLE
  470.    End
  471.    SelectObject undoid.1 MULTIPLE
  472.    Redraw
  473.  
  474.    If undos=1 then do
  475.       address "REXX"
  476.       Call TR_SETATTRIBUTE(window1,9,'TRAT_DISABLED',1)
  477.    end
  478. Return
  479.  
  480. UndoWrite:
  481.    Parse ARG i
  482.    address "REXX"
  483.  
  484.    speicher="Ram:Undo."||undos
  485.    If exists(speicher) then Call Open("FWUndo",speicher,"A")
  486.    else Call Open("FWUndo",speicher,"W")
  487.  
  488.    lein=undoid.i undoseite.i undoleft.i undotop.i undoweite.i||undohoehe.i
  489.    WriteLn("FWUndo",lein)
  490.  
  491.    Call Close("FWUndo")
  492. Return
  493.  
  494.  
  495. UndoRead:
  496.    address "REXX"
  497.    undos=undos-1
  498.  
  499.    speicher="Ram:Undo."||undos
  500.    Call Open("FWUndo",speicher,'R')
  501.  
  502.    i=0
  503.    Do Until eof("FWUndo")
  504.       i=i+1
  505.       lein=ReadLn("FWUndo")
  506.       undomenge=i
  507.       Parse Var lein undoid.i undoseite.i undoleft.i undotop.i undoweite.i undohoehe.i
  508.    end
  509.  
  510.    Call Close("FWUndo")
  511.    address command "delete "||d2c(34)||speicher||d2c(34)" QUIET"
  512. Return
  513.  
  514.  
  515. Fini:
  516.    Do i=1 to undos
  517.       speicher="Ram:Undo."
  518.       if exists(speicher||i) then address command "delete "||d2c(34)||speicher||i||d2c(34)" QUIET"
  519.    end
  520. Return
  521. /*******************************************************************************
  522. ** Routine, die bei einer Unterbrechung des Scripts aufgerufen wird
  523. *******************************************************************************/
  524.  
  525. syntax:
  526.    address "REXX"
  527.    CALL quit('Fehler' rc 'in Zeile' sigl '-' ERRORTEXT(rc)||R||SOURCELINE(sigl)||R||'Bitte informieren Sie den Autor...',20)
  528.  
  529.  
  530. /*******************************************************************************
  531. ** Script beenden
  532. *******************************************************************************/
  533.  
  534. quit:
  535.    PARSE ARG message,rcode
  536.  
  537.    IF app ~= '00000000'x THEN DO
  538.       IF message ~= '' THEN
  539.          ret=rtezrequest(message,"_Okay","ACHTUNG!","rt_pubscrname=FinalWriterPubScreen")
  540.  
  541.       CALL TR_DELETEAPP(app)
  542.    END
  543.    ELSE DO
  544.       IF message ~= '' THEN DO
  545.          SAY message
  546.          SAY
  547.          OPTIONS PROMPT 'Bitte <RETURN> drücken'
  548.          PULL taste
  549.       END
  550.    END
  551.  
  552.    Call Fini
  553.  
  554.    address command "flushtrx all"
  555.    EXIT(rcode)
  556.